package com.zoweunion.mechanic.dao.app;

import com.zoweunion.mechanic.entity.WorkHourSumEntity;
import com.zoweunion.mechanic.util.MyException;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

@Component
public interface AppOwnerDataStatisticsDao {

    // 获取今日总工时和总油耗;这里边传参时，type为1表示车主，type为2表示服务商
    Map<String, Object> workAndOil(Map<String, Object> reqMap);

    // 获取今日故障代码发生的次数;这里边传参时，type为1表示车主，type为2表示服务商
    Integer fault(Map<String, Object> reqMap);

    // 获取今日开工的设备数;这里边传参时，type为1表示车主，type为2表示服务商
    Integer workingDevice(Map<String, Object> reqMap);

    // 获取车主/服务商的总设备数;这里边传参时，type为1表示车主，type为2表示服务商
    Integer totalDevice(Map<String, Object> reqMap);

    /**
     * 工单信息(app看板)
     * @body reqMap
     * 这里边传参时，type为1表示车主，type为2表示服务商
     * @return
     * @throws MyException
     */
    Map<String, Object> orderInfo(Map<String, Object> reqMap);

    // 计算总平均工时，总平均油耗
    Map<String, Object> selectAllAverage(@Param("map")Map<String, Object> params);

    //计算平均工时和平均油耗的，如果是车主账号，就会传参oId，并且如果是车主选择车辆或者是具体车辆则会传参cId
    Map<String, Object> workFuel(@Param("map")Map<String, Object> params);

    /**
     * 车辆工时占比
     */
    //计算的是总工时（取前10），type为2表示车主，显示车辆名称；type为1表示服务商，显示车主名称
    List<WorkHourSumEntity> workingHoursPer(Map<String, Object> params);

    /**
     * 额度预警
     * @return
     * @throws MyException
     */
    Map<String, Object> quotaWarning(String oId);

    /**
     * 维修统计
     * @param
     * @return
     * @throws MyException
     */
    Map<String, Object> maintenanceStatistics(Map<String, Object> reqMap);

    /**
     * 额度预警（服务商）
     * @param
     * @return
     * @throws MyException
     */
    List<Map<String, Object>> quotaWarningPer(String sId);

    // 计算总营收
    Double selectTotalRevenue(@Param("map")Map<String, Object> reqMap);

    //        type: 1是表示月的情况，2是表示年的情况
    //        startTime: 开始时间
    //        endTime: 结束时间
    Double revenue(@Param("map")Map<String, Object> reqMap);

    //计算平均工时和平均油耗的，如果是车主账号，就会传参oId，并且如果是车主选择车辆或者是具体车辆则会传参cId
    List<Map<String, Object>> workFuelList(@Param("map")Map<String, Object> params);

    List<Map<String, Object>> revenueList(@Param("map")Map<String, Object> reqMap);

    /**
     * 车主获取车辆数据
     * @param
     * @return
     */
    List<Map<String, Object>> carListByOwner(Map<String, Object> reqMap);
}
